import underscore from 'underscore'
import { getMemberInfo } from '@/api/memberInfo'
const weeksCh = ['日', '一', '二', '三', '四', '五', '六']

/**
 * 手机号马赛克
 * @param {String} mobile 需要转码的手机号
 */
export const mobileMosaic = mobile => {
  if (mobile) {
    return mobile.replace(/^(\d{3})\d{4}(\d{4})$/, '$1 **** $2')
  } else {
    return ''
  }
}

/**
 * 数字前置补零
 * @param  {Number}  num     传入的数字
 * @param  {Number}  length  需要的长度。默认2位
 * @return {Number}  num     转换好的数字
 */
export const digit = (num, length) => {
  var str = ''
  num = String(num)
  length = length || 2
  for (var i = num.length; i < length; i++) {
    str += '0'
  }
  return num < Math.pow(10, length) ? str + (num | 0) : num
}
/**
 * 时间戳转换为对象 (new Date()) => (timeObject)
 * @param  {Number}   time   传入原时间
 * @return {Object}   object 转换后的时间戳，和时间对象
 */
export const timeToDateObj = (time = new Date().getTime()) => {
  var date = new Date()
  date.setTime(time)

  return {
    time: time,
    day: date.getDate(),
    month: date.getMonth() + 1,
    year: date.getFullYear(),
    week: weeksCh[date.getDay()],
    hours: date.getHours(),
    minutes: date.getMinutes(),
    seconds: date.getSeconds(),
    monthStr: digit(date.getMonth() + 1),
    dayStr: digit(date.getDate()),
    hoursStr: digit(date.getHours()),
    minutesStr: digit(date.getMinutes()),
    secondsStr: digit(date.getSeconds())
  }
}

/**
 * 格式化时间戳
 * @param  {Number}  time     需要转换的时间戳。默认当前时间
 * @param  {String}  format   时间格式 默认 yyyy-mm-dd HH:ii:ss
 * @return {String}  timeStr  格式化后的字符串
 */
export const formateTime = (time = new Date().getTime(), format = 'yyyy-mm-dd hh:ii:ss') => {
  // 转换时间对象
  var timeObj = timeToDateObj(time)
  // 正则
  format = format.toLocaleLowerCase().match(new RegExp('yyyy|y|mm|m|dd|d|hh|h|ii|i|ss|s' + '|.', 'g')) || []
  format.forEach((v, i) => {
    if (/yyyy|y/.test(v)) {
      // 年
      format[i] = digit(timeObj.year, v.length)
    } else if (/mm|m/.test(v)) {
      // 月
      format[i] = digit(timeObj.month, v.length)
    } else if (/dd|d/.test(v)) {
      // 日
      format[i] = digit(timeObj.day, v.length)
    } else if (/hh|h/.test(v)) {
      // 时
      format[i] = digit(timeObj.hours, v.length)
    } else if (/ii|i/.test(v)) {
      // 分
      format[i] = digit(timeObj.minutes, v.length)
    } else if (/ss|s/.test(v)) {
      // 秒
      format[i] = digit(timeObj.seconds, v.length)
    }
  })
  // 匹配格式
  return format.join('')
}

// underscore 库
// 文档:https://www.html.cn/doc/underscore/
export const _ = underscore

/**
 * 调用app方法
 * @param {*} fnName 要调用的app方法名
 * @param {*} query 传递给app的参数
 * @param {*} isStringify 传递给安卓app的参数是否序列后的json串
 * @return 是否app环境，如果是app环境，调用成功返回
 */
export const callAppFunction = (fnName, query = {}, isStringify = false) => {
  let client = window.localStorage.getItem('is_app')
  if (client && client === 'Android') {
    if (isStringify) {
      window.android && window.android[fnName](JSON.stringify(query))
      return true
    }
    window.android && window.android[fnName](...Object.values(query))
    return true
  }

  if (client && client === 'iOS') {
    window.webkit && window.webkit.messageHandlers[fnName].postMessage(query)
    return true
  }
  return false
}

/**
 * app内嵌H5初始化方法
 */
export const appIncludeHtml = _this => {
  if (_this.$route.query.client) {
    window.localStorage.setItem('is_app', _this.$route.query.client)
  }

  let client = window.localStorage.getItem('is_app')
  if (client === 'Android' || client === 'iOS') {
    _this.showHead = false
    _this.showFooter = false
  } else {
    _this.showHead = true
    _this.showFooter = true
  }

  var token = _this.$route.query.token
  if (token) {
    // 存储token
    _this.$store.commit('memberLogin', { token: token, info: { token: token } })
    // 更新用户信息
    getMemberInfo()
      .then(res => {
        _this.$store.commit('memberUpdate', { info: res.result.member_info })
      })
      .catch(res => {
        // 登陆失败的
        _this.$store.commit('memberLogout')
      })
  }
}
